﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using Microsoft.Security.Application;

namespace InhollandAirPortal {
  public partial class AnnuleerBoeking : System.Web.UI.Page {
    private Boeking PaginaBoeking = new Boeking();
    
    protected void Page_Load(object sender, EventArgs e) {
			// Label en button alleen weergegeven indien er een correcte boeking is om te annuleren
			lblBeschrijving.Visible = false;
			btnBevestigAnnulering.Visible = false;

			// Querystring ophalen
      GetQueryStringData();
      if (!String.IsNullOrEmpty(PaginaBoeking.boekingscode)) {
        if (PaginaBoeking.reis.datum > DateTime.Now.Date) {
          if (new PortalUser(this.Page.User.Identity.Name).geboekte_reizen.Any(Boeking => Boeking.boekingscode == PaginaBoeking.boekingscode)) {
            // Reis ophalen
						LoadReis(PaginaBoeking.reis);
						// Label en button weergeven
            SetInfo();
          }
					else { // Boeking is niet gedaan door de huidige gebruiker; dus niet te annuleren
            Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(MessageText.Message_ReisNietGeboektDoorUser, MessageType.MessageType_Alert));
          }
        }
				else { // Reisdatum is al verstreken; dus niet te annuleren
          Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(MessageText.Message_ReisDatumIsAlGeweest, MessageType.MessageType_Alert));
        }
      }
			else {// Ongeldige boekingscode
        divReisInfo.Controls.Add(Message.ShowMessage(MessageText.Message_BoekingscodeOngelidig, MessageType.MessageType_Alert));        
      }
    }

    private void GetQueryStringData() {
      string QueryBoekingsCode = Encoder.HtmlEncode(Request.QueryString["BC"]);
      if (!String.IsNullOrEmpty(QueryBoekingsCode)) { // Boeking ophalen d.m.v. boekingscode
        PaginaBoeking = new Boeking(QueryBoekingsCode);
      }
    }

    private void LoadReis(Reis aReis) {
      StringWriter stringWriter = new StringWriter();
			using (HtmlTextWriter writer = new HtmlTextWriter(stringWriter)) { // Div opbouwen met informatie over de boeking
        writer.Write(Reis.BouwReisDiv(PaginaBoeking.reis, false));
        divReisInfo.Controls.Add(new LiteralControl(writer.InnerWriter.ToString()));
      }
    }

    private void SetInfo() {
			lblBeschrijving.Visible = true;
      btnBevestigAnnulering.Visible = true;
    }

    protected void btnBevestigAnnulering_Click(object sender, EventArgs e) {
      string BevestigingsBericht = string.Empty;

			// Gebruiker ophalen
      PortalUser HuidigeUser = new PortalUser(this.Page.User.Identity.Name);
      if (PaginaBoeking.reis.datum > DateTime.Now.Date) { // Check of de reisdatum wel in de toekomst is
        if (HuidigeUser.geboekte_reizen.Any(Boeking => Boeking.boekingscode == PaginaBoeking.boekingscode)) {
					// Probeer reis te annuleren
          BevestigingsBericht = HuidigeUser.AnnuleerBoeking(PaginaBoeking.boekingscode);
          if (BevestigingsBericht == MessageText.Message_AnnuleringGeslaagd) { // Annulering geslaagd
            btnBevestigAnnulering.Visible = false;
            Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(BevestigingsBericht, MessageType.MessageType_Success));
          }
					else { // Annulering mislukt
            Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(BevestigingsBericht, MessageType.MessageType_Alert));
          }
        }
				else { // Reis niet geboekt door user; dus niet te annuleren
          Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(MessageText.Message_ReisNietGeboektDoorUser, MessageType.MessageType_Alert));
        }
      }
			else { // Reisdatum is al verstreken; dus niet te annuleren
        Master.FindControl("cphContent").Controls.Add(Message.ShowMessage(MessageText.Message_ReisDatumIsAlGeweest, MessageType.MessageType_Alert));
      }
    }
  }
}